<?php
/**
 * 应用程序初始化
 * @author: xiao<admin@end.wiki>
 * @time: 2017-10-08 13:54
 */
 
// 定义常量
define('EXT','.php');
define('VERSION','1.0.7');
define('DOMAIN_NAME','http://localhost');

// 设置时区
date_default_timezone_set('Asia/Shanghai');

// 不限制最长运行时间
ini_set('max_execution_time',0);	

// 定义返回数据类型
header('Content-Type:application/json; charset=utf-8');

// 处理异常句柄
function exception_handler($exception){
	echo json_encode([
		'code'	=>	$exception->getCode(),
		'msg'	=>	$exception->getMessage(),
	]);
}
set_exception_handler('exception_handler');

function error_handler($code,$msg,$filePath,$line){
    // 记录错误日志
    echo json_encode([
        'code'	=>	601,
        'msg'	=>	'系统发生错误,请联系系统管理员',
    ]);
    add_error_log($code,$msg,$filePath,$line);
    die();
}

// 处理错误句柄
set_error_handler('error_handler');

// 异常类自动加载
function autoload_handler($class){
	$path = str_replace('\\','/',$class . EXT);
	if(file_exists($path)){
		require_once  $path;
	}
}
spl_autoload_register('autoload_handler');

/*------------------------------------------
        函数库
------------------------------------------*/
// 成功返回响应
function ajax_success($data){
	echo json_encode($data);
}

// 字段类型检测
function check_type($value){
    if(is_null($value)){
        return ' VARCHAR(30) ';
    }elseif(is_float($value)){
		return ' DECIMAL(20,8) ';
	}elseif(is_double($value)){
		return ' DECIMAL(20,10) ';
	}elseif(is_numeric($value)){
        return ' bigint ';
    }elseif(is_string($value)){
        return ' VARCHAR(30) ';
    }else{
        return ' VARCHAR(30) ';
    }
	
}

// 替换关键字
function replace_primary_token($value){
	$primaryTokens = [
		'as'	=>		'zs',
		'at'	=>		'zt',
        'by'    =>      'zy',
	];
	if(in_array($value,array_keys($primaryTokens))){
		return $primaryTokens[$value];
	}
	return $value;
}

// 增加目录
function add_dir($paths){
    foreach($paths as $path) {
        if (is_dir($path)) {
            // 目录存在，什么也不做
        } else {
            mkdir($path);
        }
    }
    return true;
}

// 清空目录
function delete_all_dir($path) {
    $op = dir($path);
    while(false != ($item = $op->read())) {
        if($item == '.' || $item == '..') {
            continue;
        }
        if(is_dir($op->path.'/'.$item)) {
            deleteAll($op->path.'/'.$item);
            rmdir($op->path.'/'.$item);
        } else {
            unlink($op->path.'/'.$item);
        }
    
    }   
}

// 记录错误日志
function add_error_log($code,$msg,$filePath,$line){
    $logRootPath = './logs/';
    $logPath = $logRootPath . date('Ymd');
    add_dir([$logRootPath,$logPath]);
    $errorLogFilePath = $logPath . '/error.log';
    $file = fopen($errorLogFilePath,'a');
    $time = date('Y-m-d H:i:s');
    $content = <<<EOF
-----------------------------------------
code:$code,
msg:$msg,
filePath:$filePath,
line:$line,
time:$time
-----------------------------------------


EOF;
    fwrite($file,$content);
    fclose($file);
}